package editorsvg.editor.formas;

import editorsvg.editor.atributos.AtrLongitud;
import editorsvg.propiedades.GrupoPropiedades;
import editorsvg.propiedades.PropiedadDouble;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;

/**
 * Forma que representa una elipse.
 * @author Jorge Berjano
 */
public class Elipse extends Forma {

    private AtrLongitud cx = new AtrLongitud();
    private AtrLongitud cy = new AtrLongitud();
    private AtrLongitud rx = new AtrLongitud();
    private AtrLongitud ry = new AtrLongitud();
    private Ellipse2D elipse = new Ellipse2D.Double();
    private static GrupoPropiedades propiedadesForma;

    @Override
    public Object clone() throws CloneNotSupportedException {
        Elipse clon = (Elipse) super.clone();
        clon.cx = (AtrLongitud) cx.clone();
        clon.cy = (AtrLongitud) cy.clone();
        clon.rx = (AtrLongitud) rx.clone();
        clon.ry = (AtrLongitud) ry.clone();
        clon.elipse = (Ellipse2D) elipse.clone();

        return clon;
    }

    @Override
    public String getNombreTag() {
        return "ellipse";
    }

    @Override
    public Shape getShape() {
        return elipse;
    }

    @Override
    public void actualizar() {
        if (cx.getValor() != null && cy.getValor() != null && rx.getValor() != null && ry.getValor() != null) {
            elipse.setFrameFromCenter(cx.getValor(), cy.getValor(), cx.getValor() + rx.getValor(), cy.getValor() + ry.getValor());
        }
    }

    public void setCentro(Point2D centro) {
        cx.setValor(centro.getX());
        cy.setValor(centro.getY());
    }

    public Point2D getCentro() {
        return new Point2D.Double(cx.getValor(), cy.getValor());
    }

    public AtrLongitud cx() {
        return cx;
    }

    public AtrLongitud cy() {
        return cy;
    }

    public AtrLongitud rx() {
        return rx;
    }

    public AtrLongitud ry() {
        return ry;
    }

    public void setCx(Double valor) {
        cx.setValor(valor);
    }

    public Double getCx() {
        return cx.getValor();
    }

    public void setCy(Double valor) {
        cy.setValor(valor);
    }

    public Double getCy() {
        return cy.getValor();
    }

    public void setRx(Double valor) {
        rx.setValor(valor);
    }

    public Double getRx() {
        return rx.getValor();
    }

    public void setRy(Double valor) {
        ry.setValor(valor);
    }

    public Double getRy() {
        return ry.getValor();
    }

    @Override
    public GrupoPropiedades getPropiedades() {
        if (propiedadesForma == null) {
            propiedadesForma = new GrupoPropiedades("Elipse");
            propiedadesForma.agregarPropiedad(new PropiedadDouble("cx"));
            propiedadesForma.agregarPropiedad(new PropiedadDouble("cy"));
            propiedadesForma.agregarPropiedad(new PropiedadDouble("rx"));
            propiedadesForma.agregarPropiedad(new PropiedadDouble("ry"));
        }
        return propiedadesForma;
    }
}
